/**
 * @description 链接用户 services
 * @date 2020-07-14 15:17
 * @author LI
 */

const { AccessRecord, Account } = require('../db/model/index')
const Op = require('sequelize').Op
const { formatMoreDuring } = require('../utils/dateTime')

/**
 * 获取链接用户的扣款记录
 * @param id 链接用户 id
 * @param {Date} startTime 开始时间
 * @param {Date} endTime 结束时间
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDeductionRecordList({ startTime, endTime, page, limit, id }) {
  // 拼接查询条件
  let whereData = {}
  if (startTime && endTime) {
    startTime = _formTime(0, startTime)
    endTime = _formTime(23, endTime)
  }
  if (!startTime) {
    startTime = _formTime(0)
    endTime = _formTime(23, endTime)
  }
  if (!endTime) {
    startTime = _formTime(0, startTime)
    endTime = _formTime(23)
  }
  if (id) {
    whereData.linkUserId = id
  }
  whereData = {
    createdAt: {
      [Op.gt]: startTime,
      [Op.lt]: endTime
    }
  }
  // 查询
  const result = await AccessRecord.findAndCountAll({
    limit: limit, // 每页多少条
    offset: limit * (page - 1), // 跳过多少条
    where: whereData
  })

  // 格式化
  result.rows.map(item => {
    // 格式化时间 多个
    item.dataValues = formatMoreDuring(item.dataValues)
  })

  return result
}

/**
 * 格式化时间
 * @param time
 * @param main
 * @returns {Date}
 */
function _formTime(main, time = '') {
  if (main === 0) {
    if (!time) {
      return new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0))
    }
    return new Date(new Date(new Date(time).getTime()).setHours(0, 0, 0, 0))
  } else if (main === 23) {
    if (!time) {
      return new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 999))
    }
    return new Date(new Date(new Date(time).getTime()).setHours(23, 59, 59, 999))
  }
}

/**
 * 创建链接用户店铺地址
 * @param {number} id 链接用户 id
 * @param {string} companyAddress 店铺地址
 */
async function createShopAddress(id, companyAddress) {
  const result = await Account.findOne({
    where: { id }
  })
  let temp = result.companyAddress
  if (!temp) {
    temp = companyAddress + ','
  } else {
    temp = temp + companyAddress + ','
  }
  await Account.update({ companyAddress: temp }, {
    where: { id }
  })
  return temp
}

/**
 * 获取链接用户店铺地址
 * @param id
 * @returns {Promise<any>}
 */
async function getShopAddress(id) {
  const result = await Account.findOne({
    where: { id },
  })
  return result
}

/**
 * 通过链接用户 id 修改店铺名称
 * @param {number} id 链接用户 id
 * @param {string} name 店铺名称
 */
async function updateShopNameById(id, name) {
  const result = await Account.update({ name }, {
    where: { id }
  })

  return result[0] > 0
}

module.exports = {
  getDeductionRecordList,
  createShopAddress,
  getShopAddress,
  updateShopNameById
}
